This invention relates to error correcting code techniques.
Error correcting code techniques are used in digital systems to correct and detect errors in digital data. Such techniques are particularly employed with magnetic disks which typically have relatively high rates of error due to manufacturing defects and so forth. Several types of error correcting techniques are known. One type of error correcting technique uses so-called xe2x80x9cblock codes.xe2x80x9d Two examples of block codes are the so called xe2x80x9cReed Solomonxe2x80x9d (RS) code and xe2x80x9cBose-Chaudhuri-Hocquenghemxe2x80x9d (BCH) code.
Block codes such as xe2x80x9cReed Solomonxe2x80x9d and xe2x80x9cBose-Chaudhuri-Hocquenghemxe2x80x9d, operate on data symbols. Data symbols are vectors of binary bits of data. Symbols are generated by grouping bits at a particular bit position for a group of words into a vector. When block codes are used in a disk drive, before a string of data symbols are recorded on a disk, the string is mathematically encoded producing error correcting code symbols that are appended to the data symbols to form code words. These code words i.e., data symbols and error correcting code symbols are stored on the disk. When the stored data is retrieved from the disk, the code words are mathematically decoded to form decoded code words.
In order to correct errors, the locations and magnitudes or values of the errors are needed. A conventional approach for determining the location of such errors uses a decoder including a syndrome generator to form error syndromes. The error syndromes are used to generate an error location polynomial and the error location polynomial is used to determine an error location. The conventional approach uses a single Chien search circuit to search for roots of the error location polynomial. The Chien search circuit evaluates the error location polynomial for all possible error locators by iteratively evaluating the error location polynomial xe2x80x9cnxe2x80x9d times, where n is the code length. This is a time consuming process when n is large and the code rate is high.
The roots of the error location polynomial (i.e., when the error location polynomial is zero) correspond to the location of the errors in the code word. An error evaluation polynomial is evaluated to determine error values based on the determined error locations. Once the error locations and the corresponding error values are known, the data can be corrected.
According to an aspect of the invention, a decoder for decoding block error correction codes includes a first search circuit to find roots of an error location polynomial corresponding to an error location and a second search circuit to find roots of an error location polynomial corresponding to an error location. A multiplexer is fed by the first search circuit and the second search circuit to produce an error location from the error location polynomial.
According to a further aspect of the invention, a decoder for decoding block codes includes a parallel error location polynomial search circuit. The parallel error location search circuit includes a first search circuit that finds roots of an error location polynomial that correspond to an error location. The circuit includes a first modulo adder circuit that adds odd terms of the error location polynomial to produce a derivative of the error location polynomial. The circuit also includes a second search circuit that finds roots of an error location polynomial that correspond to an error location. A second modulo adder circuit adds odd terms of the error location polynomial to produce a derivative of the error location polynomial. The circuit also includes a first multiplexer fed by error location outputs from the first search circuit and the second search circuit, a second multiplexer fed by derivatives of error location outputs from the first and the second modulo adders. The circuit also includes an error evaluation circuit that produces the error evaluator polynomial and a logic circuit including a divider circuit to divide the error evaluator polynomial by the output from the second multiplexer.
According to a still further aspect of the invention, a method of decoding an error correcting block code includes evaluating an error location polynomial produced from an error location polynomial generation circuit by applying the error location polynomial to a parallel root search circuit that searches for roots of the error location polynomial in a parallel manner.
One or more advantages are provided by the above aspects. The two-way parallel root search circuit searches for roots of the error location polynomial in a parallel manner. This saves substantial computation time to facilitate real time decoding of high rate Reed Solomon and BCH codes. For example, a two-way parallel root search circuit can use two duplicate root search circuits to reduce the search time to determine the roots of an error-locator polynomial by half. An additional advantage of the arrangement is that the parallel root search circuit can be modified to provide a term that can be used with an error evaluator without the need to compute a derivative of the error location polynomial.